#include "graph.h"
#include <bits/stdc++.h>
#define ll long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;

namespace{
    int n,fa[205],ans[205],edge[205][205],dis[205][205]; bool T[205][205],flag[205][205];
    void dfs0(int u){
        int d=NumberOfRoads();
        for(int i=1,las;i<=d;i++) if(i!=fa[u]){
            Move(i,2),las=LastRoad();
            if(Color()==1) flag[u][i]=1; Move(las,Color());
        }
        for(int i=1,las;i<=d;i++) if(flag[u][i]){
            Move(i,2),las=LastRoad();
            if(Color()==1) fa[++n]=las,T[u][i]=1,dfs0(n); Move(las,2);
        }
    }
    void dfs(int u,int w){
        int d=NumberOfRoads(),c=u/w%3+1;
        for(int i=1,las,t;i<=d;i++) if(flag[u][i]){
            Move(i,c),las=LastRoad();
            if(T[u][i]) t=++n/w%3,edge[u][i]+=t*w,dfs(n,w);
            else edge[u][i]+=(Color()-1)*w,Move(las,Color());
        } if(fa[u]) Move(fa[u],c);
    }
}

void Inspect(int R){
    dfs0(++n); for(int i=0,x=1;i<5;i++,x*=3) n=0,dfs(++n,x);
    memset(dis,0x3f,sizeof(dis));
    for(int i=1;i<=n;i++) for(int j=1;j<=200;j++)
        dis[i][edge[i][j]]=dis[edge[i][j]][i]=1;
    for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)
        dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
    for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) ans[dis[i][j]]++;
    for(int i=1;i<=R;i++) Answer(i,ans[i]);
}
